/* +------------------------------------------------------------------------+
   |                     Mobile Robot Programming Toolkit (MRPT)            |
   |                          https://www.mrpt.org/                         |
   |                                                                        |
   | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file     |
   | See: https://www.mrpt.org/Authors - All rights reserved.               |
   | Released under BSD License. See: https://www.mrpt.org/License          |
   +------------------------------------------------------------------------+ */
#pragma once

#include <mrpt/config.h>

namespace mrpt::gui
{
// These key codes are an exact replication of those of wxWidgets.
//  They are defined within MRPT for convenience, since users don't have to
//  install
//  wxWidgets in order to build MRPT applications.
//  See: http://docs.wxwidgets.org/stable/wx_keycodes.html

/*  Virtual keycodes */
enum mrptKeyCode
{
	MRPTK_BACK = 8,
	MRPTK_TAB = 9,
	MRPTK_RETURN = 13,
	MRPTK_ESCAPE = 27,
	MRPTK_SPACE = 32,
	MRPTK_DELETE = 127,

	MRPTK_START = 300,
	MRPTK_LBUTTON,
	MRPTK_RBUTTON,
	MRPTK_CANCEL,
	MRPTK_MBUTTON,
	MRPTK_CLEAR,
	MRPTK_SHIFT,
	MRPTK_ALT,
	MRPTK_CONTROL,
	MRPTK_MENU,
	MRPTK_PAUSE,
	MRPTK_CAPITAL,
	MRPTK_END,
	MRPTK_HOME,
	MRPTK_LEFT,
	MRPTK_UP,
	MRPTK_RIGHT,
	MRPTK_DOWN,
	MRPTK_SELECT,
	MRPTK_PRINT,
	MRPTK_EXECUTE,
	MRPTK_SNAPSHOT,
	MRPTK_INSERT,
	MRPTK_HELP,
	MRPTK_NUMPAD0,
	MRPTK_NUMPAD1,
	MRPTK_NUMPAD2,
	MRPTK_NUMPAD3,
	MRPTK_NUMPAD4,
	MRPTK_NUMPAD5,
	MRPTK_NUMPAD6,
	MRPTK_NUMPAD7,
	MRPTK_NUMPAD8,
	MRPTK_NUMPAD9,
	MRPTK_MULTIPLY,
	MRPTK_ADD,
	MRPTK_SEPARATOR,
	MRPTK_SUBTRACT,
	MRPTK_DECIMAL,
	MRPTK_DIVIDE,
	MRPTK_F1,
	MRPTK_F2,
	MRPTK_F3,
	MRPTK_F4,
	MRPTK_F5,
	MRPTK_F6,
	MRPTK_F7,
	MRPTK_F8,
	MRPTK_F9,
	MRPTK_F10,
	MRPTK_F11,
	MRPTK_F12,
	MRPTK_F13,
	MRPTK_F14,
	MRPTK_F15,
	MRPTK_F16,
	MRPTK_F17,
	MRPTK_F18,
	MRPTK_F19,
	MRPTK_F20,
	MRPTK_F21,
	MRPTK_F22,
	MRPTK_F23,
	MRPTK_F24,
	MRPTK_NUMLOCK,
	MRPTK_SCROLL,
	MRPTK_PAGEUP,
	MRPTK_PAGEDOWN,

	MRPTK_NUMPAD_SPACE,
	MRPTK_NUMPAD_TAB,
	MRPTK_NUMPAD_ENTER,
	MRPTK_NUMPAD_F1,
	MRPTK_NUMPAD_F2,
	MRPTK_NUMPAD_F3,
	MRPTK_NUMPAD_F4,
	MRPTK_NUMPAD_HOME,
	MRPTK_NUMPAD_LEFT,
	MRPTK_NUMPAD_UP,
	MRPTK_NUMPAD_RIGHT,
	MRPTK_NUMPAD_DOWN,
	MRPTK_NUMPAD_PAGEUP,
	MRPTK_NUMPAD_PAGEDOWN,

	MRPTK_NUMPAD_END,
	MRPTK_NUMPAD_BEGIN,
	MRPTK_NUMPAD_INSERT,
	MRPTK_NUMPAD_DELETE,
	MRPTK_NUMPAD_EQUAL,
	MRPTK_NUMPAD_MULTIPLY,
	MRPTK_NUMPAD_ADD,
	MRPTK_NUMPAD_SEPARATOR,
	MRPTK_NUMPAD_SUBTRACT,
	MRPTK_NUMPAD_DECIMAL,
	MRPTK_NUMPAD_DIVIDE,

	MRPTK_WINDOWS_LEFT,
	MRPTK_WINDOWS_RIGHT,
	MRPTK_WINDOWS_MENU,
	MRPTK_COMMAND,

	/* Hardware-specific buttons */
	MRPTK_SPECIAL1 = 193,
	MRPTK_SPECIAL2,
	MRPTK_SPECIAL3,
	MRPTK_SPECIAL4,
	MRPTK_SPECIAL5,
	MRPTK_SPECIAL6,
	MRPTK_SPECIAL7,
	MRPTK_SPECIAL8,
	MRPTK_SPECIAL9,
	MRPTK_SPECIAL10,
	MRPTK_SPECIAL11,
	MRPTK_SPECIAL12,
	MRPTK_SPECIAL13,
	MRPTK_SPECIAL14,
	MRPTK_SPECIAL15,
	MRPTK_SPECIAL16,
	MRPTK_SPECIAL17,
	MRPTK_SPECIAL18,
	MRPTK_SPECIAL19,
	MRPTK_SPECIAL20
};

/* This enum contains bit mask constants used in wxKeyEvent */
enum mrptKeyModifier
{
	MRPTKMOD_NONE = 0x0000,
	MRPTKMOD_ALT = 0x1000,
	MRPTKMOD_CONTROL = 0x2000,
	MRPTKMOD_ALTGR = MRPTKMOD_ALT | MRPTKMOD_CONTROL,
	MRPTKMOD_SHIFT = 0x4000,
	MRPTKMOD_META = 0x8000,
	MRPTKMOD_WIN = MRPTKMOD_META,
#ifdef __APPLE__
	MRPTKMOD_CMD = MRPTKMOD_META
#else
	MRPTKMOD_CMD = MRPTKMOD_CONTROL
#endif
};

}  // namespace mrpt::gui
